home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / SOUND.SWG / 0025_CDRom Audio Disk Player.pas < prev    next >
Pascal/Delphi Source File  |  1993-08-27  |  4KB  |  184 lines

  1. {
  2. NICHOLAS KIRSCH
  3.  
  4. Here is some source For using CD-ROM's With Pascal, if you get TP7,
  5. it's still compatible.
  6.  
  7. { Copyright 1993 by Michael W. Armstrong.
  8.                     2800 Skipwith Rd
  9.                     Richmond, VA 23294
  10.  
  11.   Compuserve ID 72740, 1145
  12.   This Program is entered as Shareware.  if you find it useful, a small
  13.   donation would be appreciated.  Feel free to incorporate the code into
  14.   your own Programs.
  15. }
  16.  
  17. {$X+}
  18. Program CDPlay;
  19.  
  20. {$IfDef Windows}
  21. {$C PRELOAD}
  22. Uses
  23.   CD_Vars,
  24.   CDUnit_P,
  25.   WinCrt,
  26.   WinProcs;
  27. {$else}
  28. Uses
  29.   CD_Vars,
  30.   CDUnit_P,
  31.   Crt,
  32.   Drivers;
  33. {$endIf}
  34.  
  35. Type
  36.   TotPlayRec = Record
  37.      Frames,
  38.      Seconds,
  39.      Minutes,
  40.      Nada     : Byte;
  41.   end;
  42.  
  43. Var
  44.   GoodDisk   : Boolean;
  45.   SaveExit   : Pointer;
  46.   OldMode    : Word;
  47.   CurrentTrack,
  48.   StartTrack,
  49.   endTrack   : Integer;
  50.   TotPlay    : TotPlayRec;
  51.   TrackInfo  : Array [1..99] of PAudioTrackInfo;
  52.  
  53. Function LeadingZero(w : Word) : String;
  54. Var
  55.   s : String;
  56. begin
  57.   Str(w : 0, s);
  58.   LeadingZero := Copy('00', 1, 2 - Length(s)) + s;
  59. end;
  60.  
  61. Procedure DrawScreen;
  62. Const
  63.   TStr = '%03d:%02d';
  64.   VStr = '%1d.%2d';
  65. Var
  66.   FStr  : PChar;
  67.   NStr  : String;
  68.   Param : Array [1..2] of LongInt;
  69.   Code  : Integer;
  70. begin
  71.   WriteLn('CD ROM Audio Disk Player');
  72.   WriteLn('Copyright 1992 by M. W. ARMSTRONG');
  73.   Param[1] := MSCDEX_Version.Major;
  74.   Param[2] := MSCDEX_Version.Minor;
  75.  
  76. {$IfDef Windows}
  77.   wvsPrintf(FStr, VStr, Param);
  78. {$else}
  79.   FormatStr(NStr, VStr, Param);
  80. {$endIf}
  81.  
  82.   WriteLn('MSCDEX Version ', NStr);
  83.   Str(NumberOfCD, NStr);
  84.   WriteLn('Number of CD ROM Drives is: ' + Nstr);
  85.   WriteLn('First CD Drive Letter is  : ' + Chr(FirstCD + 65));
  86.   WriteLn('There are ' + LeadingZero(endTrack - StartTrack + 1) +
  87.           ' Tracks on this disk');
  88.   Code := 1;
  89. end;
  90. {***********************************************************************}
  91.  
  92. {***********************************************************************}
  93.  
  94.  
  95. Procedure Setup;
  96. Var
  97.   LeadOut,
  98.   StartP,
  99.   TotalPlayTime : LongInt;
  100.   I       : Integer;
  101.   A, B, C : LongInt;
  102.   Track   : Byte;
  103.   EA      : Array [1..4] of Byte;
  104.   SP, EP  : LongInt;
  105.  
  106. begin
  107.   FillChar(AudioDiskInfo, SizeOf(AudioDiskInfo), #0);
  108.   DeviceStatus;
  109.   if Audio then
  110.   begin
  111.     Audio_Disk_Info;
  112.     TotalPlayTime := 0;
  113.     LeadOut := AudioDiskInfo.LeadOutTrack;
  114.  
  115.     StartTrack   := AudioDiskInfo.LowestTrack;
  116.     endTrack     := AudioDiskInfo.HighestTrack;
  117.     CurrentTrack := StartTrack;
  118.     I := StartTrack - 1;
  119.  
  120.     Repeat               { Checks if Audio Track or Data Track }
  121.       Inc(I);
  122.       Track := I;
  123.       Audio_Track_Info(StartP, Track);
  124.     Until (Track and 64 = 0) or (I = endTrack);
  125.  
  126.     StartTrack := I;
  127.  
  128.     For I := StartTrack to endTrack DO
  129.     begin
  130.       Track := I;
  131.       Audio_Track_Info(StartP, Track);
  132.       New(TrackInfo[I]);
  133.       FillChar(TrackInfo[I]^, SizeOf(TrackInfo[I]^), #0);
  134.       TrackInfo[I]^.Track := I;
  135.       TrackInfo[I]^.StartPoint := StartP;
  136.       TrackInfo[I]^.TrackControl := Track;
  137.     end;
  138.  
  139.     For I := StartTrack to endTrack - 1 DO
  140.       TrackInfo[I]^.endPoint := TrackInfo[I+1]^.StartPoint;
  141.     TrackInfo[endTrack]^.endPoint := LeadOut;
  142.  
  143.     For I := StartTrack to endTrack DO
  144.       Move(TrackInfo[I]^.endPoint, TrackInfo[I]^.Frames, 4);
  145.  
  146.     TrackInfo[StartTrack]^.PlayMin := TrackInfo[StartTrack]^.Minutes;
  147.     TrackInfo[StartTrack]^.PlaySec := TrackInfo[StartTrack]^.Seconds - 2;
  148.  
  149.     For I := StartTrack + 1 to endTrack DO
  150.     begin
  151.       EP := (TrackInfo[I]^.Minutes * 60) + TrackInfo[I]^.Seconds;
  152.       SP := (TrackInfo[I-1]^.Minutes * 60) + TrackInfo[I-1]^.Seconds;
  153.       EP := EP - SP;
  154.       TrackInfo[I]^.PlayMin := EP div 60;
  155.       TrackInfo[I]^.PlaySec := EP Mod 60;
  156.     end;
  157.  
  158.     TotalPlayTime := AudioDiskInfo.LeadOutTrack -
  159.                      TrackInfo[StartTrack]^.StartPoint;
  160.     Move(TotalPlayTime, TotPlay, 4);
  161.   end;
  162. end;
  163.  
  164. {***********************************************************************}
  165.  
  166.  
  167. begin
  168.   Setup;
  169.   if Audio then
  170.    if Playing then
  171.      StopAudio
  172.   else
  173.   begin
  174.     StopAudio;
  175.     Play_Audio(TrackInfo[StartTrack]^.StartPoint,
  176.           TrackInfo[endTrack]^.endPoint);
  177.     Audio_Status_Info;
  178.     DrawScreen;
  179.   end
  180.   else
  181.     WriteLn('This is not an Audio CD');
  182.   WriteLn('UPC Code is: ', UPC_Code);
  183. end.
  184.